#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QList>
#include <QToolButton>
#include <QLabel>
#include <QMouseEvent>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QStandardItemModel>
#include <QDate>

class ChangePasswordDialog;  // 前向声明
class FeedbackDialog;        // 前向声明

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class CourseCard;
class CustomCalendarWidget;

// 自定义可点击标签类
class ClickableLabel : public QLabel
{
    Q_OBJECT

public:
    explicit ClickableLabel(QWidget* parent = nullptr) : QLabel(parent) {}

    // 重写鼠标按下事件
    void mousePressEvent(QMouseEvent* event) override {
        if (event->button() == Qt::LeftButton) {
            emit clicked();
        }
        QLabel::mousePressEvent(event);
    }

signals:
    void clicked();
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


    void loadCourseCards();

private:
    Ui::MainWindow *ui;
    //当前用户是否是老师
    bool                m_IsTeacher;
    QList<QToolButton*> m_List_ToolgButton;
    QLabel*             m_pTitleLabel;  // 用于显示当前页面标题的标签
    QList<CourseCard*>  m_List_CourseCards; // 课程卡片列表
    

    // 用于在tableView中显示课程数据的模型
    QStandardItemModel* m_pCourseModel;
    
    // 当前选择的日期
    QDate m_selectedDate;

    bool            m_courseLoaded = false;
    //QNetworkAccessManager m_net;

    // 获取课程列表 网络请求相关
    QNetworkAccessManager*  mNet_       =       nullptr;
    QNetworkReply* mReply_ = nullptr;

private:
    void initData();
    void initUI();
    void setupPageTitles();  // 设置页面标题
    void setupCoursePage();  // 设置课程页面
    void setupSettingPage();  // 设置页面标签点击事件处理

private slots:
    void onToolButtonClicked();  // 工具按钮点击槽函数
    void onPageChanged(int index);  // 页面切换槽函数
    void onSettingLabelClicked();  // 设置页面标签点击处理函数
    void onLogoutButtonClicked();  // 退出登录按钮点击处理函数
    
    // 网络请求相关槽函数
    void onScheduleDataReceived(QNetworkReply* reply); // 课表数据接收处理
    
    // 日历相关槽函数
    void onCalendarSelectionChanged(); // 日历选择变更处理函数
    //void onCourseReply();

    // 获取课程列表处理函数
    void getCourseList();
    void ReplyFinshed();
    void SendPostRequst(const QString& strhead,QByteArray arr);

};
#endif // MAINWINDOW_H
